import listaEnlazada
import unittest

class Cola:
    def __init__(self):
        self.__datos__=listaEnlazada.ListaEnlazada()
    
    def poner(self,elem):
        self.__datos__.agregar(elem,self.__datos__.getTamanio())
    
    def sacar(self):
        elem=self.__datos__.elemento(0)
        self.__datos__.eliminar(0)
        return elem
        
    def tope(self):
        return self.__datos__.elemento(0)
        
    def esVacia(self):
        valor=self.__datos__.esVacia()
        if(valor==True):return True
        else: return False
    
    def getTamanio(self):
        return self.__datos__.getTamanio()

class Test(unittest.TestCase):

    def testInit(self):
        self.assertIsInstance(Cola(),Cola, "testea creaciona de __datos__")

    def testPoner(self):
        obj=Cola()
        obj.poner(23)
        self.assertFalse(obj.esVacia(), "verifica existencia de elemento")
    
    def testTope(self):
        obj=Cola()
        obj.poner(1)
        obj.poner(2)
        obj.poner(3)
        self.assertEquals(obj.tope(),1, "verifica existencia del dato")
#         self.assertEquals(obj.__datos__.elemento(2), 3, "Verifica final de la cola")
    
    def testSacar(self):
        obj=Cola()
        obj.poner(5)
        obj.poner(10)
        obj.poner(16)
        obj.poner(27)
        elim=obj.sacar()
        self.assertEquals(elim, 5,"elemento eliminado")
        elim=obj.sacar()
        self.assertEquals(elim, 10,"elemento eliminado")
        elim=obj.sacar()
        self.assertEquals(elim, 16,"elemento eliminado")
        self.assertFalse(obj.esVacia(), "verifica existencia de elemento")
    
    def testEsVacia(self):
        obj=Cola()
        self.assertTrue(obj.esVacia(), "Verifica devolucion correcta")
        obj.poner(1)
        self.assertFalse(obj.esVacia(), "Verifica devolucion correcta")
    

        
        
if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()